package com.minimalist.common.feign.client.tc;

import com.minimalist.common.config.mybatis.bo.PageResp;
import com.minimalist.common.entity.tc.entity.vo.plateNumber.TcPlateNumberQueryVO;
import com.minimalist.common.entity.tc.entity.vo.plateNumber.TcPlateNumberVO;
import com.minimalist.common.feign.config.FeignConfig;
import com.minimalist.common.feign.fallback.tc.TcPlateNumberFeignClientFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 车牌号管理 Feign 客户端
 *
 * @author minimalist
 */
@FeignClient(name = "minimalist-tc", contextId = "tcPlateNumberFeignClient", path = "/tc/plateNumber", configuration = FeignConfig.class, fallbackFactory = TcPlateNumberFeignClientFallbackFactory.class)
public interface TcPlateNumberFeignClient{

    /**
     * 添加车牌号
     *
     * @param plateNumberVO 车牌号信息
     * @return 响应结果
     */
    @PostMapping("/addPlateNumber")
    ResponseEntity<Void> addPlateNumber(@RequestBody TcPlateNumberVO plateNumberVO);

    /**
     * 批量添加车牌号
     *
     * @param plateNumberVOList 车牌号信息列表
     * @return 响应结果
     */
    @PostMapping("/batchAddPlateNumber")
    ResponseEntity<Void> batchAddPlateNumber(@RequestBody List<TcPlateNumberVO> plateNumberVOList);

    /**
     * 更新车牌号
     *
     * @param plateNumberVO 车牌号信息
     * @return 响应结果
     */
    @PutMapping("/updatePlateNumber")
    ResponseEntity<Void> updatePlateNumber(@RequestBody TcPlateNumberVO plateNumberVO);

    /**
     * 删除车牌号
     *
     * @param plateNumberId 车牌号ID
     * @return 响应结果
     */
    @DeleteMapping("/deletePlateNumber/{plateNumberId}")
    ResponseEntity<Void> deletePlateNumber(@PathVariable("plateNumberId") Long plateNumberId);

    /**
     * 获取车牌号详情
     *
     * @param plateNumberId 车牌号ID
     * @return 车牌号详情
     */
    @GetMapping("/getPlateNumber/{plateNumberId}")
    ResponseEntity<TcPlateNumberVO> getPlateNumber(@PathVariable("plateNumberId") Long plateNumberId);

    /**
     * 分页查询车牌号列表
     *
     * @param queryVO 查询条件
     * @return 车牌号列表
     */
    @GetMapping("/getPagePlateNumberList")
    ResponseEntity<PageResp<TcPlateNumberVO>> getPagePlateNumberList(@SpringQueryMap TcPlateNumberQueryVO queryVO);

    /**
     * 识别车牌号
     *
     * @param imageBase64 图片Base64编码
     * @return 识别结果
     */
    @PostMapping("/recognizePlateNumber")
    ResponseEntity<String> recognizePlateNumber(@RequestBody String imageBase64);
}